const SystemSetting = require('../model/SystemModel');

// 获取系统设置（单条，id=1）
exports.getSettings = async (req, res) => {
    try {
        const data = await SystemSetting.getSettings();
        if (!data) {
            return res.status(404).json({ code: 1, msg: '暂无配置' });
        }
        res.json({ code: 0, data });
    } catch (e) {
        console.error('获取系统设置错误:', e.message);
        res.status(500).json({ code: 1, msg: '服务器内部错误', error: e.message });
    }
};

// 更新系统设置（id=1）
exports.updateSettings = async (req, res) => {
    try {
        // 获取请求体中的数据
        const data = req.body;

        // 检查是否有要更新的数据
        if (Object.keys(data).length === 0) {
            return res.status(400).json({ code: 1, msg: '没有提供要更新的数据' });
        }

        // 验证必要字段（如果提供了的话）
        if (data.sys_name !== undefined && !data.sys_name) {
            return res.status(400).json({ code: 1, msg: '系统名称不能为空' });
        }
        if (data.sys_version !== undefined && !data.sys_version) {
            return res.status(400).json({ code: 1, msg: '版本号不能为空' });
        }

        // 执行更新操作
        await SystemSetting.updateSettings(data);

        res.json({ code: 0, msg: '设置已更新成功' });
    } catch (e) {
        console.error('更新系统设置错误:', e.message);
        res.status(500).json({ code: 1, msg: '服务器内部错误', error: e.message });
    }
};

// 更新基本信息设置
exports.updateBasicInfo = async (req, res) => {
    try {
        const data = req.body;

        // 检查是否有要更新的数据
        if (Object.keys(data).length === 0) {
            return res.status(400).json({ code: 1, msg: '没有提供要更新的数据' });
        }

        // 定义基本信息设置允许的字段
        const allowedFields = [
            'sys_name',
            'sys_version',
            'sys_desc',
            'default_house',
            'data_retention_days'
        ];

        // 过滤只保留允许的字段
        const updateData = {};
        Object.keys(data).forEach(key => {
            if (allowedFields.includes(key)) {
                updateData[key] = data[key];
            }
        });

        // 如果没有允许的字段需要更新
        if (Object.keys(updateData).length === 0) {
            return res.status(400).json({ code: 1, msg: '没有提供有效的基本信息字段' });
        }

        // 验证必要字段（如果提供了的话）
        if (updateData.sys_name !== undefined && !updateData.sys_name) {
            return res.status(400).json({ code: 1, msg: '系统名称不能为空' });
        }
        if (updateData.sys_version !== undefined && !updateData.sys_version) {
            return res.status(400).json({ code: 1, msg: '版本号不能为空' });
        }

        // 执行更新操作
        await SystemSetting.updateSettings(updateData);

        res.json({ code: 0, msg: '基本信息设置已更新成功' });
    } catch (e) {
        console.error('更新基本信息设置错误:', e.message);
        res.status(500).json({ code: 1, msg: '服务器内部错误', error: e.message });
    }
};

// 更新通知设置
exports.updateNotificationSettings = async (req, res) => {
    try {
        const data = req.body;

        // 检查是否有要更新的数据
        if (Object.keys(data).length === 0) {
            return res.status(400).json({ code: 1, msg: '没有提供要更新的数据' });
        }

        // 定义通知设置允许的字段
        const allowedFields = [
            'system_notic_email',
            'enable_inventory_alerts',
            'enable_generation_plan',
            'enable_analysis_reports',
            'stock_alert_min',
            'stock_alert_max',
            'notification_method',
            'notification_preferences',
            'daily_report_time',
            'week_report_time'
        ];

        // 过滤只保留允许的字段
        const updateData = {};
        Object.keys(data).forEach(key => {
            if (allowedFields.includes(key)) {
                updateData[key] = data[key];
            }
        });

        // 如果没有允许的字段需要更新
        if (Object.keys(updateData).length === 0) {
            return res.status(400).json({ code: 1, msg: '没有提供有效的通知设置字段' });
        }

        // 执行更新操作
        await SystemSetting.updateSettings(updateData);

        res.json({ code: 0, msg: '通知设置已更新成功' });
    } catch (e) {
        console.error('更新通知设置错误:', e.message);
        res.status(500).json({ code: 1, msg: '服务器内部错误', error: e.message });
    }
};

// 更新安全设置
exports.updateSecuritySettings = async (req, res) => {
    try {
        const data = req.body;

        // 检查是否有要更新的数据
        if (Object.keys(data).length === 0) {
            return res.status(400).json({ code: 1, msg: '没有提供要更新的数据' });
        }

        // 定义安全设置允许的字段
        const allowedFields = [
            'pwd_length',
            'pwd_require_num',
            'pwd_require_word',
            'pwd_require_special',
            'login_failur',
            'session_timeout'
        ];

        // 过滤只保留允许的字段
        const updateData = {};
        Object.keys(data).forEach(key => {
            if (allowedFields.includes(key)) {
                updateData[key] = data[key];
            }
        });

        // 如果没有允许的字段需要更新
        if (Object.keys(updateData).length === 0) {
            return res.status(400).json({ code: 1, msg: '没有提供有效的安全设置字段' });
        }

        // 执行更新操作
        await SystemSetting.updateSettings(updateData);

        res.json({ code: 0, msg: '安全设置已更新成功' });
    } catch (e) {
        console.error('更新安全设置错误:', e.message);
        res.status(500).json({ code: 1, msg: '服务器内部错误', error: e.message });
    }
};

// 更新日志设置
exports.updateLogSettings = async (req, res) => {
    try {
        const data = req.body;

        // 检查是否有要更新的数据
        if (Object.keys(data).length === 0) {
            return res.status(400).json({ code: 1, msg: '没有提供要更新的数据' });
        }

        // 定义日志设置允许的字段
        const allowedFields = [
            'record_user_log',
            'record_sys_error'
        ];

        // 过滤只保留允许的字段
        const updateData = {};
        Object.keys(data).forEach(key => {
            if (allowedFields.includes(key)) {
                updateData[key] = data[key];
            }
        });

        // 如果没有允许的字段需要更新
        if (Object.keys(updateData).length === 0) {
            return res.status(400).json({ code: 1, msg: '没有提供有效的日志设置字段' });
        }

        // 执行更新操作
        await SystemSetting.updateSettings(updateData);

        res.json({ code: 0, msg: '日志设置已更新成功' });
    } catch (e) {
        console.error('更新日志设置错误:', e.message);
        res.status(500).json({ code: 1, msg: '服务器内部错误', error: e.message });
    }
};